"""
布林带策略(backtrader实现)
策略逻辑：
1. 当价格触及下轨时买入
2. 当价格触及上轨时卖出
"""

import backtrader as bt

class BollingerBandsStrategy(bt.Strategy):
    params = (
        ('period', 20),    # 布林带计算周期
        ('devfactor', 2.0) # 标准差倍数
    )

    def __init__(self):
        # 初始化布林带指标
        self.bollinger = bt.indicators.BollingerBands(
            self.data.close, 
            period=self.p.period,
            devfactor=self.p.devfactor
        )

    def next(self):
        if not self.position:  # 没有持仓
            if self.data.close[0] <= self.bollinger.bot[0]:  # 价格触及下轨
                self.buy()  # 买入
        elif self.data.close[0] >= self.bollinger.top[0]:  # 价格触及上轨
            self.close()  # 卖出

if __name__ == '__main__':
    cerebro = bt.Cerebro()
    cerebro.addstrategy(BollingerBandsStrategy)
    # 这里添加数据和其他配置
    cerebro.run()